﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using negocios;
using objetos;
using publico;
using System.Transactions;
using System.Text;
using System.Data;

namespace softsales.pagina.pedido
{
    public partial class pedido_editar : System.Web.UI.Page
    {
        // pedido
        OBJ_TB_PEDIDO o_tb_pedido = new OBJ_TB_PEDIDO();
        BLL_TB_PEDIDO b_tb_pedido = new BLL_TB_PEDIDO();

        // pedido ITEM
        BLL_TB_PEDIDO_ITEM b_tb_pedido_item = new BLL_TB_PEDIDO_ITEM();
        OBJ_TB_PEDIDO_ITEM o_tb_pedido_item = new OBJ_TB_PEDIDO_ITEM();

        // pedido USUARIO
        OBJ_TB_PEDIDO_HISTORICO o_tb_pedido_historico = new OBJ_TB_PEDIDO_HISTORICO();
        BLL_TB_PEDIDO_HISTORICO b_tb_pedido_historico = new BLL_TB_PEDIDO_HISTORICO();


        // CADASTRO
        OBJ_TB_CADASTRO o_tb_cadastro = new OBJ_TB_CADASTRO();
        BLL_TB_CADASTRO b_tb_cadastro = new BLL_TB_CADASTRO();

        // ENDERECO CADASTRO
        OBJ_TB_ENDERECO_CADASTRO o_tb_endereco_cadastro = new OBJ_TB_ENDERECO_CADASTRO();
        BLL_TB_ENDERECO_CADASTRO b_tb_endereco_cadastro = new BLL_TB_ENDERECO_CADASTRO();

        // FORMA PAGAMENTO
        BLL_TB_FORMA_PAGAMENTO b_tb_forma_pagamento = new BLL_TB_FORMA_PAGAMENTO();

        // CONDICAO PAGAMENTO
        BLL_TB_CONDICAO_PAGAMENTO b_tb_condicao_pagamento = new BLL_TB_CONDICAO_PAGAMENTO();
        OBJ_TB_CONDICAO_PAGAMENTO o_tb_condicao_pagamento = new OBJ_TB_CONDICAO_PAGAMENTO();

        // EMPRESA
        BLL_TB_EMPRESA b_tb_empresa = new BLL_TB_EMPRESA();
        OBJ_TB_EMPRESA o_tb_empresa = new OBJ_TB_EMPRESA();

        BLL_TB_EMPRESA_CENTRO_CUSTO b_tb_empresa_centro_custo = new BLL_TB_EMPRESA_CENTRO_CUSTO();
        OBJ_TB_EMPRESA_CENTRO_CUSTO o_tb_empresa_centro_custo = new OBJ_TB_EMPRESA_CENTRO_CUSTO();

        BLL_TB_TIPO_ENDERECO b_tb_tipo_endereco = new BLL_TB_TIPO_ENDERECO();

        BLL_TB_TIPO_LOGRADOURO b_tb_tipo_logradouro = new BLL_TB_TIPO_LOGRADOURO();

        BLL_TB_PAISES b_tb_paises = new BLL_TB_PAISES();

        BLL_TB_CIDADE b_tb_cidade = new BLL_TB_CIDADE();
        OBJ_TB_CIDADE o_tb_cidade = new OBJ_TB_CIDADE();

        BLL_TB_UF b_tb_uf = new BLL_TB_UF();
        OBJ_TB_UF o_tb_uf = new OBJ_TB_UF();

        // pedido
        BLL_TB_TIPO_SITUACAO_PEDIDO b_tb_situacao_pedido = new BLL_TB_TIPO_SITUACAO_PEDIDO();

        // UNIDADE MEDIDA
        BLL_TB_UNIDADE_MEDIDA b_tb_unidade_medida = new BLL_TB_UNIDADE_MEDIDA();

        // PRODUTO
        OBJ_TB_PRODUTO o_tb_produto = new OBJ_TB_PRODUTO();
        BLL_TB_PRODUTO b_tb_produto = new BLL_TB_PRODUTO();

        // LOG ERRO
        BLL_TB_LOG_ERRO b_tb_log_erro = new BLL_TB_LOG_ERRO();

        // operacao
        BLL_TB_PEDIDO_OPERACAO b_tb_pedido_operacao = new BLL_TB_PEDIDO_OPERACAO();

        BLL_TB_USUARIO b_tb_usuario = new BLL_TB_USUARIO();

        // orcamento
        OBJ_TB_ORCAMENTO o_tb_orcamento = new OBJ_TB_ORCAMENTO();
        BLL_TB_ORCAMENTO b_tb_orcamento = new BLL_TB_ORCAMENTO();

        // orcamento item
        BLL_TB_ORCAMENTO_ITEM b_tb_orcamento_item = new BLL_TB_ORCAMENTO_ITEM();
        OBJ_TB_ORCAMENTO_ITEM o_tb_orcamento_item = new OBJ_TB_ORCAMENTO_ITEM();

        // centro custo
        BLL_TB_CENTRO_CUSTO b_tb_centro_custo = new BLL_TB_CENTRO_CUSTO();
        OBJ_TB_CENTRO_CUSTO o_tb_centro_custo = new OBJ_TB_CENTRO_CUSTO();

        // banco conta corrente
        BLL_TB_BANCO_CONTA_CORRENTE b_tb_banco_conta_corrente = new BLL_TB_BANCO_CONTA_CORRENTE();
        OBJ_TB_BANCO_CONTA_CORRENTE o_tb_banco_conta_corrente = new OBJ_TB_BANCO_CONTA_CORRENTE();

        BLL_TB_CONTA_CONTABIL b_tb_conta_contabil = new BLL_TB_CONTA_CONTABIL();
        OBJ_TB_CONTA_CONTABIL o_tb_conta_contabil = new OBJ_TB_CONTA_CONTABIL();

        private int id_operacao { get; set; }
        private int id_empresa { get; set; }
        private int id_pedido { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (PUB_SESSAO.Logado())
            {
                 
                if (Request["id_operacao"] != null)
                {
                    id_operacao = Convert.ToInt32(Request["id_operacao"].ToString());

                }




                if (!IsPostBack)
                {
                    TituloPagina();

                    // dropdownlist

                    b_tb_condicao_pagamento.PreencheControleWeb(DDL_ID_CONDICAO_PAGAMENTO, true);
                    b_tb_empresa.PreencheControleWeb(DDL_ID_EMPRESA, true);
                    b_tb_forma_pagamento.PreencheControle(DDL_ID_FORMA_PAGAMENTO, true);
                    b_tb_situacao_pedido.PreencheControle(DDL_ID_SITUACAO_PEDIDO, true);
                    b_tb_pedido_operacao.PreencheControle(DDL_ID_OPERACAO, false);
                    b_tb_centro_custo.PreencheControle(DDL_ID_CENTRO_CUSTO, true);
                    b_tb_conta_contabil.PreencheControle(DDL_ID_CONTA_CONTABIL, true);
                    b_tb_banco_conta_corrente.PreencheControle(DDL_ID_BANCO_CONTA_CORRENTE, true);
                    

                    DDL_ID_OPERACAO.SelectedValue = id_operacao.ToString();
                    DDL_ID_OPERACAO.Enabled = false;


                    TXT_DT_EMISSAO.Text = DateTime.Now.ToShortDateString();

                    int aberto = (int)PUB_ENUM.PEDIDO_SITUACAO.ABERTO;
                    DDL_ID_SITUACAO_PEDIDO.SelectedValue = aberto.ToString();
                    DDL_ID_SITUACAO_PEDIDO.Enabled = false;

                    TAB_CONTAINER.ActiveTab = TAB_PEDIDO;
                    PNL_GERAR_FINANCEIRO.Visible = false;

                    TXT_VALOR_DESCONTO.Text = "0,00";
                    TXT_VALOR_OUTRO.Text = "0,00";
                    TXT_VALOR_TOTAL_DESCONTO.Text = "0,00";                 
                    TXT_VALOR_TOTAL_ITEM.Text = "0,00";
                    TXT_VALOR_TOTAL_PEDIDO.Text = "0,00";
                    TXT_VALOR_TOTAL_OUTRO.Text = "0,00";
                    TXT_VALOR_TOTAL_PRODUTO.Text = "0,00";
                    TXT_VALOR_TOTAL_SERVICO.Text = "0,00";
                    TXT_VALOR_UNITARIO.Text = "0,00";
                    TXT_QTD.Text = "1";


                    if (Request["id"] != null)
                    {
                        if (PUB_FUNCOES.ApenasInteiro(Request["id"].ToString()))
                        {
                            Editar(Request["id"].ToString());
                           
                        }


                    }


                }
                else
                {

                    if (Session["id_cadastro"] != null)
                    {
                        int id_cadastro = Convert.ToInt32(Session["id_cadastro"].ToString());

                        o_tb_cadastro = b_tb_cadastro.SelecionarObjetoPorId(id_cadastro);

                        TXT_ID_CLI_FOR.Text = o_tb_cadastro.id.ToString();
                        TXT_NOME_CLI_FOR.Text = o_tb_cadastro.nome.ToString();
                        Session.Remove("id_cadastro");

                    }

                    if (Session["id_produto"] != null)
                    {
                        int id_produto = Convert.ToInt32(Session["id_produto"].ToString());

                        o_tb_produto = b_tb_produto.SelecionarObjetoPorId(id_produto);

                        TXT_ID_PRODUTO_SERVICO.Text = id_produto.ToString();
                        TXT_DESCRICAO.Text = o_tb_produto.descricao.ToString();
                        TXT_VALOR_UNITARIO.Text = PUB_FUNCOES.TrataDecimal(o_tb_produto.valor_venda.ToString());
                        TXT_VALOR_DESCONTO.Text = "0,00";
                        TXT_VALOR_OUTRO.Text = "0,00";
                        TXT_VALOR_TOTAL_ITEM.Text = PUB_FUNCOES.TrataDecimal(o_tb_produto.valor_venda.ToString());

                    }

                }


            }
        }

        private void Editar(string id)
        {

            try
            {
                o_tb_pedido = b_tb_pedido.SelecionarObjetoPorId(Convert.ToInt32(id));

                if (o_tb_pedido != null)
                {
                    o_tb_cadastro = b_tb_cadastro.SelecionarObjetoPorId(o_tb_pedido.id_cadastro);

                }

                HF_ID.Value = o_tb_pedido.id.ToString();
                id_pedido = o_tb_pedido.id;
                id_empresa = o_tb_pedido.id_empresa;

                if (o_tb_pedido != null)
                {
                    TXT_ID_CLI_FOR.Text = o_tb_pedido.id_cadastro.ToString();
                    TXT_NOME_CLI_FOR.Text = o_tb_cadastro.nome.ToString();
                    TXT_NUM_ORCAMENTO.Text = o_tb_pedido.id_orcamento.ToString();

                    DDL_ID_EMPRESA.SelectedValue = o_tb_pedido.id_empresa.ToString();
                    TXT_NUM_PEDIDO.Text = o_tb_pedido.id.ToString();
                    TXT_NUM_ORCAMENTO.Text = o_tb_pedido.id_orcamento.ToString();
                    DDL_ID_FORMA_PAGAMENTO.SelectedValue = o_tb_pedido.id_forma_pagamento.ToString();
                    DDL_ID_CONDICAO_PAGAMENTO.SelectedValue = o_tb_pedido.id_condicao_pagamento.ToString();
                    TXT_DT_EMISSAO.Text = PUB_FUNCOES.FormataDataBR(o_tb_pedido.dt_emissao.ToString());
                    TXT_DT_FECHAMENTO.Text = PUB_FUNCOES.FormataDataBR(o_tb_pedido.dt_fechamento.ToString());
                    TXT_DT_ENTREGA_RECEBIMENTO.Text = o_tb_pedido.dt_entrega_recebimento.ToString();
                    DDL_ID_OPERACAO.SelectedValue = o_tb_pedido.id_operacao.ToString();
                    TXT_PLACA.Text = o_tb_pedido.veiculo_placa.ToString();
                    TXT_KM.Text = o_tb_pedido.veiculo_km.ToString();
                    DDL_ID_SITUACAO_PEDIDO.SelectedValue = o_tb_pedido.id_situacao_pedido.ToString();
                    TXT_VALOR_TOTAL_SERVICO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_servico.ToString());
                    TXT_VALOR_TOTAL_PRODUTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_produto.ToString());
                    TXT_VALOR_TOTAL_DESCONTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_desconto.ToString());
                    TXT_VALOR_TOTAL_OUTRO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_outro.ToString());
                    TXT_VALOR_TOTAL_PEDIDO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_pedido.ToString());
                    TXT_OBSERVACAO.Text = o_tb_pedido.observacao.ToString();


                    DDL_ID_EMPRESA.Enabled = false;
                    TXT_NUM_PEDIDO.Enabled = false;
                    TXT_NUM_ORCAMENTO.Enabled = false;
                    TXT_ID_CLI_FOR.Enabled = false;
                    IMG_BTN_ABRIR_MODAL_CLI_FOR.Visible = false;
                    IMG_BTN_ABRIR_MODAL_ORCAMENTO.Visible = false;

                    CarregaGrid();

                    CarregaParametrosFinanceiros();

                    CarregaFinanceiro(o_tb_pedido.id_empresa, o_tb_pedido.id, o_tb_pedido.id_operacao);

                    
                }


            }
            catch (Exception ex)
            {
                b_tb_log_erro.IncluirLogErro(ex);
                Master.MSG_ALERTA("Erro ao tentar carregar o formulário de pedido.");
            }



        }

        private void TituloPagina()
        {
            if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.SAIDA))
            {
                LBL_TITULO_PAGINA.Text = string.Format("Pedido Venda Nº {0}", HF_ID.Value);
            }
            else
            {
                LBL_TITULO_PAGINA.Text = string.Format("Pedido Compra Nº {0}", HF_ID.Value);
            }

        }


        private void CarregaParametrosFinanceiros()
        {
            if (DDL_ID_EMPRESA.SelectedValue != string.Empty)
            {
                b_tb_banco_conta_corrente.PreencheControle(DDL_ID_BANCO_CONTA_CORRENTE, string.Format("tb_banco_conta_corrente.id_empresa = {0}", DDL_ID_EMPRESA.SelectedValue), "", true);

                b_tb_centro_custo.PreencheControle(DDL_ID_CENTRO_CUSTO, string.Format("tb_centro_custo.id in (select id_centro_custo from tb_empresa_centro_custo where id_empresa = {0})", DDL_ID_EMPRESA.SelectedValue), "", true);

                if (DDL_ID_CENTRO_CUSTO.Items.Count > 0)
                {
                    if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.ENTRADA))
                    {
                        DDL_ID_CENTRO_CUSTO.SelectedValue = string.Format("{0}", (int)PUB_ENUM.CENTRO_CUSTO.COMPRAS);
                    }
                    else
                    {
                        DDL_ID_CENTRO_CUSTO.SelectedValue = string.Format("{0}", (int)PUB_ENUM.CENTRO_CUSTO.VENDAS);
                    }

                    if (DDL_ID_CENTRO_CUSTO.SelectedValue != string.Empty)
                    {
                        b_tb_conta_contabil.PreencheControle(DDL_ID_CONTA_CONTABIL, string.Format("tb_conta_contabil.id in (select id_conta_contabil from tb_centro_custo_conta_contabil where id_centro_custo = {0})", DDL_ID_CENTRO_CUSTO.SelectedValue), "", false);
                    }

                }
                else
                {
                    Master.MSG_ALERTA("Erro ao carregar a relação centro de custo x empresa, cadastre a tabela centro de custo x empresa.");
                }


            }

        }

        private void CarregaFinanceiro(int id_empresa, int id_pedido, int id_operacao)
        {
            BLL_TB_CONTA_PAGAR b_tb_conta_pagar = new BLL_TB_CONTA_PAGAR();
            BLL_TB_CONTA_RECEBER b_tb_conta_receber = new BLL_TB_CONTA_RECEBER();
            OBJ_TB_CONTA_PAGAR o_tb_conta_pagar = new OBJ_TB_CONTA_PAGAR();
            OBJ_TB_CONTA_RECEBER o_tb_conta_receber = new OBJ_TB_CONTA_RECEBER();
            List<OBJ_TB_CONTA_RECEBER> lista_conta_receber = new List<OBJ_TB_CONTA_RECEBER>();
            List<OBJ_TB_CONTA_PAGAR> lista_conta_pagar = new List<OBJ_TB_CONTA_PAGAR>();


            try
            {
                decimal valor_lancado = 0;
                decimal valor_pedido = 0;

                valor_pedido = Convert.ToDecimal(TXT_VALOR_TOTAL_PEDIDO.Text);

                if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.ENTRADA))
                {
                    lista_conta_pagar = b_tb_conta_pagar.ListaContaPagarPedido(id_empresa, id_pedido);

                    for (int i = 0; i <= lista_conta_pagar.Count - 1; i++)
                    {
                        valor_lancado = valor_lancado + lista_conta_pagar[i].valor_parcela;
                    }

                    GRV_TB_FINANCEIRO.DataSource = lista_conta_pagar;
                    GRV_TB_FINANCEIRO.DataBind();
                }
                else
                {
                    lista_conta_receber = b_tb_conta_receber.ListaContaReceberPedido(id_empresa, id_pedido);

                    for (int i = 0; i <= lista_conta_receber.Count - 1; i++)
                    {
                        valor_lancado = valor_lancado + lista_conta_receber[i].valor_parcela;
                    }
                    GRV_TB_FINANCEIRO.DataSource = lista_conta_receber;
                    GRV_TB_FINANCEIRO.DataBind();
                }

                TXT_VALOR_SALDO.Text = string.Format("{0}", valor_pedido - valor_lancado);
                TXT_VALOR_PARCELA.Text = string.Format("{0}", valor_pedido - valor_lancado);


                if (GRV_TB_FINANCEIRO.Rows.Count > 0)
                {
                    PNL_GERAR_FINANCEIRO.Visible = true;
                }
            }
            catch (Exception)
            {

                throw;
            }



        }

        private void PreenchePedidoItem()
        {
            try 
	        {
                GRV_TB_PEDIDO_ITEM.DataSource = b_tb_pedido_item.Selecionar(string.Format("tb_pedido_item.id_pedido={0}", HF_ID.Value), "");
                GRV_TB_PEDIDO_ITEM.DataBind();
		
	        }
	        catch (Exception)
	        {
		
		        throw;
	        }
    
        }

        protected void BTN_INCLUIR_ITEM_Click(object sender, EventArgs e)
        {
            try
            {
                if (TXT_ID_PRODUTO_SERVICO.Text != string.Empty && TXT_VALOR_UNITARIO.Text != string.Empty && TXT_VALOR_TOTAL_ITEM.Text != string.Empty && TXT_QTD.Text != string.Empty)
                {

                    using (TransactionScope scope = new TransactionScope())
                    {
                        IncluirPedidoItem();
                        PreenchePedidoItem();
                        TotalPedido();
                        IncluirPedidoHistorico(string.Format("Login {0} incluiu o item {1}", PUB_SESSAO.Id, TXT_DESCRICAO.Text));
                        PNL_PEDIDO_ITEM.Visible = true;

                        TXT_ID_PRODUTO_SERVICO.Text = string.Empty;
                        TXT_DESCRICAO.Text = string.Empty;
                        TXT_VALOR_UNITARIO.Text = "0,00";
                        TXT_VALOR_OUTRO.Text = "0,00";
                        TXT_VALOR_DESCONTO.Text = "0,00";
                        TXT_VALOR_TOTAL_ITEM.Text = "0,00";
                        TXT_QTD.Text = "1";

                        scope.Complete();
                    }


                }



            }
            catch (Exception)
            {

                throw;
            }
        }

        private void AtualizaValorPedido()
        {

            b_tb_pedido_item.AtualizaTotalPedido(Convert.ToInt32(HF_ID.Value));

        }


        private void TotalPedido()
        {

            o_tb_pedido = b_tb_pedido.SelecionarObjetoPorId(Convert.ToInt32(HF_ID.Value));

            TXT_VALOR_TOTAL_DESCONTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_desconto.ToString());
            TXT_VALOR_TOTAL_PEDIDO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_pedido.ToString());
            TXT_VALOR_TOTAL_OUTRO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_outro.ToString());
            TXT_VALOR_TOTAL_PRODUTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_produto.ToString());
            TXT_VALOR_TOTAL_SERVICO.Text = PUB_FUNCOES.FormataNumerico(o_tb_pedido.valor_total_servico.ToString());
        }

        private void IncluirPedido()
        {

            int id_pedido = 0;

            if (TXT_DT_APROVACAO.Text != string.Empty)
                o_tb_pedido.dt_aprovacao = Convert.ToDateTime(TXT_DT_APROVACAO.Text);

            o_tb_pedido.dt_checkin = null;
            if (TXT_DT_EMISSAO.Text != string.Empty)
                o_tb_pedido.dt_emissao = Convert.ToDateTime(TXT_DT_EMISSAO.Text);

            if (TXT_DT_ENTREGA_RECEBIMENTO.Text != string.Empty)
                o_tb_pedido.dt_entrega_recebimento = Convert.ToDateTime(TXT_DT_ENTREGA_RECEBIMENTO.Text);

            if (TXT_DT_FECHAMENTO.Text != string.Empty)
                o_tb_pedido.dt_fechamento = Convert.ToDateTime(TXT_DT_FECHAMENTO.Text);

            if (TXT_ID_CLI_FOR.Text != string.Empty)
                o_tb_pedido.id_cadastro = Convert.ToInt32(TXT_ID_CLI_FOR.Text);

            if (DDL_ID_SITUACAO_PEDIDO.SelectedValue != string.Empty)
                o_tb_pedido.id_situacao_pedido = Convert.ToInt32(DDL_ID_SITUACAO_PEDIDO.SelectedValue);

            if (DDL_ID_OPERACAO.SelectedValue != string.Empty)
                o_tb_pedido.id_operacao = Convert.ToInt32(DDL_ID_OPERACAO.SelectedValue);

            if (DDL_ID_EMPRESA.SelectedValue != string.Empty)
                o_tb_pedido.id_empresa = Convert.ToInt32(DDL_ID_EMPRESA.SelectedValue);

            if (DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty)
                o_tb_pedido.id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);

            if (DDL_ID_CONDICAO_PAGAMENTO.SelectedValue != string.Empty)
                o_tb_pedido.id_condicao_pagamento = Convert.ToInt32(DDL_ID_CONDICAO_PAGAMENTO.SelectedValue);

            o_tb_pedido.id_orcamento = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(TXT_NUM_ORCAMENTO.Text));


            o_tb_pedido.id_usuario_checkin = null;
            o_tb_pedido.id_usuario_criador = PUB_SESSAO.Id;
            o_tb_pedido.informacao_adicional = string.Empty;
            o_tb_pedido.observacao = TXT_OBSERVACAO.Text.Trim();
            o_tb_pedido.valor_total_desconto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_DESCONTO.Text));
            o_tb_pedido.valor_total_pedido = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_PEDIDO.Text));
            o_tb_pedido.valor_total_outro = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_OUTRO.Text));
            o_tb_pedido.valor_total_produto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_PRODUTO.Text));
            o_tb_pedido.valor_total_servico = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_SERVICO.Text));
            o_tb_pedido.veiculo_km = TXT_KM.Text.Trim();
            o_tb_pedido.veiculo_placa = TXT_PLACA.Text;

            id_pedido = b_tb_pedido.Incluir(o_tb_pedido);

            HF_ID.Value = id_pedido.ToString();
            TXT_NUM_PEDIDO.Text = id_pedido.ToString();

        }


        private void AlterarPedido()
        {
            o_tb_pedido.id = Convert.ToInt32(HF_ID.Value);

            if (TXT_DT_APROVACAO.Text != string.Empty)
                o_tb_pedido.dt_aprovacao = Convert.ToDateTime(TXT_DT_APROVACAO.Text);

            o_tb_pedido.dt_checkin = null;
            if (TXT_DT_EMISSAO.Text != string.Empty)
                o_tb_pedido.dt_emissao = Convert.ToDateTime(TXT_DT_EMISSAO.Text);

            if (TXT_DT_ENTREGA_RECEBIMENTO.Text != string.Empty)
                o_tb_pedido.dt_entrega_recebimento = Convert.ToDateTime(TXT_DT_ENTREGA_RECEBIMENTO.Text);

            if (TXT_DT_FECHAMENTO.Text != string.Empty)
                o_tb_pedido.dt_fechamento = Convert.ToDateTime(TXT_DT_FECHAMENTO.Text);

            if (TXT_ID_CLI_FOR.Text != string.Empty)
                o_tb_pedido.id_cadastro = Convert.ToInt32(TXT_ID_CLI_FOR.Text);

            if (DDL_ID_SITUACAO_PEDIDO.SelectedValue != string.Empty)
                o_tb_pedido.id_situacao_pedido = Convert.ToInt32(DDL_ID_SITUACAO_PEDIDO.SelectedValue);

            if (DDL_ID_OPERACAO.SelectedValue != string.Empty)
                o_tb_pedido.id_operacao = Convert.ToInt32(DDL_ID_OPERACAO.SelectedValue);

            if (DDL_ID_EMPRESA.SelectedValue != string.Empty)
                o_tb_pedido.id_empresa = Convert.ToInt32(DDL_ID_EMPRESA.SelectedValue);

            if (DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty)
                o_tb_pedido.id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);

            if (DDL_ID_CONDICAO_PAGAMENTO.SelectedValue != string.Empty)
                o_tb_pedido.id_condicao_pagamento = Convert.ToInt32(DDL_ID_CONDICAO_PAGAMENTO.SelectedValue);

            o_tb_pedido.id_orcamento = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(TXT_NUM_ORCAMENTO.Text));


            o_tb_pedido.id_usuario_checkin = null;
            o_tb_pedido.id_usuario_criador = PUB_SESSAO.Id;
            o_tb_pedido.informacao_adicional = string.Empty;
            o_tb_pedido.observacao = TXT_OBSERVACAO.Text.Trim();
            o_tb_pedido.valor_total_desconto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_DESCONTO.Text));
            o_tb_pedido.valor_total_pedido = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_PEDIDO.Text));
            o_tb_pedido.valor_total_outro = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_OUTRO.Text));
            o_tb_pedido.valor_total_produto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_PRODUTO.Text));
            o_tb_pedido.valor_total_servico = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_SERVICO.Text));
            o_tb_pedido.veiculo_km = TXT_KM.Text.Trim();
            o_tb_pedido.veiculo_placa = TXT_PLACA.Text;

            b_tb_pedido.Alterar(o_tb_pedido);
        }

        private void IncluirPedidoHistorico(string historico)
        {
            o_tb_pedido_historico.desc_pedido_historico = historico;
            o_tb_pedido_historico.dt_atualizacao = DateTime.Now;
            o_tb_pedido_historico.id_pedido = Convert.ToInt32(HF_ID.Value);
            o_tb_pedido_historico.id_usuario = PUB_SESSAO.Id;
            b_tb_pedido_historico.Incluir(o_tb_pedido_historico);
        }

        private void IncluirPedidoItem()
        {

            o_tb_produto = b_tb_produto.SelecionarObjetoPorId(Convert.ToInt32(TXT_ID_PRODUTO_SERVICO.Text));

            o_tb_pedido_item.descricao = TXT_DESCRICAO.Text;
            o_tb_pedido_item.ean = o_tb_produto.ean.ToString();
            o_tb_pedido_item.id_pedido = Convert.ToInt32(HF_ID.Value);
            o_tb_pedido_item.id_produto_servico = o_tb_produto.id;
            o_tb_pedido_item.id_tipo_item = o_tb_produto.id_tipo_item;
            o_tb_pedido_item.id_unidade_medida = Convert.ToInt32(o_tb_produto.id_unidade_medida);
            o_tb_pedido_item.qtd = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_QTD.Text));
            o_tb_pedido_item.valor_desconto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_DESCONTO.Text));
            o_tb_pedido_item.valor_outro = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_OUTRO.Text));
            o_tb_pedido_item.valor_total = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_ITEM.Text));
            o_tb_pedido_item.valor_unitario = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_UNITARIO.Text));
            o_tb_pedido_item.sit_total_nota = 1;
            b_tb_pedido_item.Incluir(o_tb_pedido_item);
        }

        public void CarregaGrid()
        {

            try
            {
                StringBuilder sb = new StringBuilder();

                DataSet ds = new DataSet();
                List<string> lista = new List<string>();

                lista.Add(string.Format(" tb_pedido_item.id_pedido = {0}", HF_ID.Value));

                sb.Append(string.Join(" and ", lista.ToArray()));


                ds = b_tb_pedido_item.Selecionar(sb.ToString(), PUB_PAGINACAO.Sort, PUB_PAGINACAO.PageIndex, PUB_PAGINACAO.PageSize);

                if (ds.Tables[0].Rows.Count > 0)
                {
                    GRV_TB_PEDIDO_ITEM.DataSource = ds;
                    GRV_TB_PEDIDO_ITEM.DataBind();
                  //  PUB_PAGINACAO.Paginacao(true);
                }
                else
                {
                    GRV_TB_PEDIDO_ITEM.EmptyDataText = "Nenhum registro foi encontrado";
                    GRV_TB_PEDIDO_ITEM.DataBind();
                }
            }
            catch (Exception)
            {

                throw;
            }



        }

        protected void GRV_TB_PEDIDO_ITEM_Sorting(object sender, GridViewSortEventArgs e)
        {
            PUB_PAGINACAO.Sort = e.SortExpression;
            if (PUB_PAGINACAO.SortDirection == SortDirection.Ascending)
            {
                PUB_PAGINACAO.SortDirection = SortDirection.Descending;
                PUB_PAGINACAO.Sort = PUB_PAGINACAO.Sort + " " + PUB_PAGINACAO.DESCENDENTE;
            }
            else
            {
                PUB_PAGINACAO.SortDirection = SortDirection.Ascending;
                PUB_PAGINACAO.Sort = PUB_PAGINACAO.Sort + "  " + PUB_PAGINACAO.ASCENDENTE;
            }

            CarregaGrid();

        }

        protected void BTN_SALVAR_Click(object sender, EventArgs e)
        {
            
            string msg = string.Empty;
            try
            {
                
                if (b_tb_pedido_item.ExisteItem(Convert.ToInt32(HF_ID.Value)))
                {
                    if (TXT_ID_CLI_FOR.Text != string.Empty && TXT_NOME_CLI_FOR.Text != string.Empty
                    && DDL_ID_EMPRESA.SelectedValue != string.Empty)
                    {
                        using (TransactionScope scope = new TransactionScope())
                        {
                            AlterarPedido();
                            IncluirPedidoHistorico(string.Format("Login {0} alterou o pedido",PUB_SESSAO.Login));
                            msg = "Pedido Nº " + id_pedido + " foi alterado com sucesso";
                            Master.MSG_ALERTA(msg, string.Format("pedido_visualizar.aspx?id={0}&id_operacao={1}", HF_ID.Value, id_operacao), false);
                            scope.Complete();

                        }

                    }
                }
                else
                {
                    Master.MSG_ALERTA("É necessário incluir um produto para salvar o pedido.");
                }





            }
            catch (Exception ex)
            {
                b_tb_log_erro.IncluirLogErro(ex);
                msg = "Erro ao tentar salvar o pedido detalhe do erro - " + ex.Message;
                Master.MSG_ERRO(msg);

            }

        }

        protected void GRV_TB_PEDIDO_ITEM_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GRV_TB_PEDIDO_ITEM.PageIndex = e.NewPageIndex;
            PUB_PAGINACAO.PageIndex = e.NewPageIndex;
            CarregaGrid();
        }

        protected void IMG_BTN_PRIMEIRO_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = 0;
            CarregaGrid();
        }

        protected void IMG_BTN_ANTERIOR_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = PUB_PAGINACAO.PageIndex - 1;
            CarregaGrid();
        }

        protected void IMG_BTN_PROXIMO_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = PUB_PAGINACAO.PageIndex + 1;
            CarregaGrid();
        }

        protected void IMG_BTN_ULTIMO_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = PUB_PAGINACAO.TotalDePaginas - 1;
            CarregaGrid();
        }

        protected void DDL_ID_FORMA_PAGAMENTO_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty)
                {
                    b_tb_condicao_pagamento.PreencheControleWeb(DDL_ID_CONDICAO_PAGAMENTO, string.Format("tb_condicao_pagamento.id_forma_pagamento = {0}", DDL_ID_FORMA_PAGAMENTO.SelectedValue), "", false);

                    if (DDL_ID_CONDICAO_PAGAMENTO.Items.Count == 0)
                    {
                        Master.MSG_ALERTA("Erro ao tentar carregar condicao de pagamento, verifique a relação forma de pagamento x condição de pagamento.");
                    }
                }
            }
            catch (Exception)
            {
                
                throw;
            }
            
        }

        protected void IMG_BTN_EXCLUIR_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                ImageButton btn = (ImageButton)sender;

                int id = 0;
                if (btn != null)
                {
                    id = Convert.ToInt32(btn.CommandArgument);

                    using (TransactionScope scope = new TransactionScope())
                    {
                        o_tb_pedido_item = b_tb_pedido_item.SelecionarObjetoPorId(id);
                        b_tb_pedido_item.Excluir(o_tb_pedido_item);
                        AtualizaTotalPedido();
                        TotalPedido();
                        CarregaGrid();
                    }
                    

                }
            }
            catch (Exception)
            {

                throw;
            }
        }


        private void AtualizaTotalPedido()
        {
            b_tb_pedido_item.AtualizaTotalPedido(Convert.ToInt32(HF_ID.Value));
        }


        protected void BTN_CANCELAR_Click(object sender, EventArgs e)
        {
            Response.Redirect(string.Format("default.aspx?id_operacao={0}",id_operacao),false);
        }

        protected void DDL_ID_EMPRESA_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (DDL_ID_EMPRESA.SelectedValue != string.Empty)
            {
                b_tb_banco_conta_corrente.PreencheControle(DDL_ID_BANCO_CONTA_CORRENTE, string.Format("tb_banco_conta_corrente.id_empresa = {0}", DDL_ID_EMPRESA.SelectedValue), "", true);

                b_tb_centro_custo.PreencheControle(DDL_ID_CENTRO_CUSTO, true);
            }
        }

        protected void CHK_GERAR_FINANCEIRO_CheckedChanged(object sender, EventArgs e)
        {
            if (CHK_GERAR_FINANCEIRO.Checked)
            {
                PNL_GERAR_FINANCEIRO.Visible = true;
            }
            else
            {
                PNL_GERAR_FINANCEIRO.Visible = false;
            }
        }

        protected void BTN_INCLUIR_PAGAMENTO_Click(object sender, EventArgs e)
        {
            BLL_TB_CONTA_RECEBER b_tb_conta_receber = new BLL_TB_CONTA_RECEBER();
            OBJ_TB_CONTA_PAGAR o_tb_conta_pagar = new OBJ_TB_CONTA_PAGAR();

            BLL_TB_CONTA_PAGAR b_tb_conta_pagar = new BLL_TB_CONTA_PAGAR();
            OBJ_TB_CONTA_RECEBER o_tb_conta_receber = new OBJ_TB_CONTA_RECEBER();

            try
            {
                if (CHK_GERAR_FINANCEIRO.Checked)
                {

                    int id_pedido = 0;
                    int id_empresa = 0;
                    int id_cadastro = 0;
                    int id_conta_contabil = 0;
                    int id_forma_pagamento = 0;
                    int id_centro_custo = 0;
                    int id_condicao_pagamento = 0;
                    int id_banco_conta_corrente = 0;
                    decimal valor_parcela = 0;
                    decimal valor_pedido = 0;                    

                    using (TransactionScope scope = new TransactionScope())
                    {
                        o_tb_pedido = b_tb_pedido.SelecionarObjetoPorId(Convert.ToInt32(HF_ID.Value));

                        id_pedido = o_tb_pedido.id;
                        id_cadastro = o_tb_pedido.id_cadastro;
                        id_empresa = o_tb_pedido.id_empresa;
                        id_condicao_pagamento = Convert.ToInt32(DDL_ID_CONDICAO_PAGAMENTO.SelectedValue);
                        id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);
                        id_conta_contabil = Convert.ToInt32(DDL_ID_CONTA_CONTABIL.SelectedValue);
                        id_centro_custo = Convert.ToInt32(DDL_ID_CENTRO_CUSTO.SelectedValue);
                        id_banco_conta_corrente = Convert.ToInt32(DDL_ID_BANCO_CONTA_CORRENTE.SelectedValue);
                        valor_parcela = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_PARCELA.Text));
                        valor_pedido = o_tb_pedido.valor_total_pedido;

                        if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.ENTRADA))
                        {
                            b_tb_conta_pagar.Incluir(id_pedido, id_empresa, id_cadastro, id_forma_pagamento, id_condicao_pagamento, id_conta_contabil, id_centro_custo, id_banco_conta_corrente, valor_parcela, valor_pedido);
            
                        }
                        else
                        {
                            b_tb_conta_receber.Incluir(id_pedido, id_empresa, id_cadastro, id_forma_pagamento, id_condicao_pagamento, id_conta_contabil, id_centro_custo, id_banco_conta_corrente, valor_parcela, valor_pedido);

                        }

                        CarregaFinanceiro(id_empresa, id_pedido, id_operacao);

                        scope.Complete();

                    }


                }
            }
            catch (Exception)
            {

                throw;
            }


        }

        protected void DDL_ID_CENTRO_CUSTO_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (DDL_ID_CENTRO_CUSTO.SelectedValue != string.Empty)
                {
                    b_tb_conta_contabil.PreencheControle(DDL_ID_CONTA_CONTABIL, string.Format("tb_conta_contabil.id in (select id_conta_contabil from tb_centro_custo_conta_contabil  where id_centro_custo = {0})", DDL_ID_CENTRO_CUSTO.SelectedValue), "", false);

                    if (DDL_ID_CONTA_CONTABIL.Items.Count == 0)
                    {
                        Master.MSG_ALERTA("Erro ao tentar carregar a lista de conta contábil.. verifique a relação entre centro de custo x conta contabil.");
                    }
                }
            }
            catch (Exception)
            {
                
                throw;
            }
            
        }

        protected void IMG_BTN_EXCLUIR_PAGAMENTO_Click(object sender, ImageClickEventArgs e)
        {
            BLL_TB_CONTA_RECEBER b_tb_conta_receber = new BLL_TB_CONTA_RECEBER();
            OBJ_TB_CONTA_PAGAR o_tb_conta_pagar = new OBJ_TB_CONTA_PAGAR();
            BLL_TB_CONTA_PAGAR b_tb_conta_pagar = new BLL_TB_CONTA_PAGAR();
            OBJ_TB_CONTA_RECEBER o_tb_conta_receber = new OBJ_TB_CONTA_RECEBER();

            try
            {
                ImageButton btn = (ImageButton)sender;

                if (DDL_ID_EMPRESA.SelectedValue != string.Empty && TXT_NUM_PEDIDO.Text != string.Empty)
                {
                    int id_empresa = Convert.ToInt32(DDL_ID_EMPRESA.SelectedValue);
                    int id_pedido = Convert.ToInt32(TXT_NUM_PEDIDO.Text);

                    if (btn != null)
                    {
                        int id = Convert.ToInt32(btn.CommandArgument);

                        if (Equals(id_operacao, (int)PUB_ENUM.PEDIDO_OPERACAO.ENTRADA))
                        {
                            o_tb_conta_pagar = b_tb_conta_pagar.SelecionarObjetoPorId(id);
                            b_tb_conta_pagar.Excluir(o_tb_conta_pagar);
                        }
                        else
                        {
                            o_tb_conta_receber = b_tb_conta_receber.SelecionarObjetoPorId(id);
                            b_tb_conta_receber.Excluir(o_tb_conta_receber);
                        }

                    }

                    CarregaFinanceiro(id_empresa, id_pedido, id_operacao);


                }
                else
                {
                    Master.MSG_ALERTA("É necessário selecionar a empresa.");
                }

            }
            catch (Exception)
            {

                throw;
            }
        }
    }
}